/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import connection.Connection;
import dao.CalificaJpaController;
import dao.EvaluadorJpaController;
import dao.ProyectoJpaController;
import dao.exceptions.IllegalOrphanException;
import dao.exceptions.NonexistentEntityException;
import dao.exceptions.PreexistingEntityException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManagerFactory;
import modelo.Califica;
import modelo.Evaluador;
import modelo.Profesor;
import modelo.Proyecto;

/**
 *
 * @author Fabian
 */
@ManagedBean(name = "ControladorProyecto")
@SessionScoped
public class ControladorProyecto {

    private List<Proyecto> listaProyecto;
    private List<Proyecto> listaProyectoFacultad;
    private EntityManagerFactory factory;
    private Proyecto proyecto;
    private String IDProyecto;
    private String nombre;
    private String cedulaProfesor;
    private String facultad;
    private int duracion;
    private int presupuesto;
    private Date fechaInicio;
    private Date fechaFin;
    private int calificacion;
    private String estado;
    private String descripcion;

    public ControladorProyecto() {
    }

    public void cargarProyectos() {

        factory = Connection.getEmf();
        ProyectoJpaController daoProyecto = new ProyectoJpaController(factory);
        setListaProyecto(daoProyecto.findProyectoEntities());
    }

    public void cargarProyectosFacultad() {

        factory = Connection.getEmf();
        ProyectoJpaController daoProyecto = new ProyectoJpaController(factory);
        ControladorProfesor controla = (ControladorProfesor) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("ControladorProfesor");
        Profesor p = controla.getProfesor();

        List<Proyecto> proyectos = daoProyecto.findProyectoEntities();
        List<Proyecto> facultad = new ArrayList<Proyecto>();
        for (int i = 0; i < proyectos.size(); i++) {

            if (proyectos.get(i).getFacultad().getNombre().equals(p.getFacultad().getNombre())) {

                facultad.add(proyectos.get(i));
            }

        }
        setListaProyectoFacultad(facultad);

    }

    public void cargarProyectosProfesor() {
        factory = Connection.getEmf();
        ProyectoJpaController daoProyecto = new ProyectoJpaController(factory);
        ControladorProfesor controla = (ControladorProfesor) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("ControladorProfesor");
        Profesor p = controla.getProfesor();
        List<Proyecto> proyectos = daoProyecto.findProyectoEntities();
        List<Proyecto> profe = new ArrayList<Proyecto>();
        for (int i = 0; i < proyectos.size(); i++) {

            if (proyectos.get(i).getCedulaProfesor().getCedula().equals(p.getCedula())) {

                profe.add(proyectos.get(i));
            }
        }
        setListaProyecto(profe);

    }

    public void cargarProyectoEvaluador() {
        factory = Connection.getEmf();
        ProyectoJpaController daoProyecto = new ProyectoJpaController(factory);
        EvaluadorJpaController daoEvaluador = new EvaluadorJpaController(factory);
        Controlador controla = (Controlador) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("Controlador");
        String Aux = controla.getLogin();
        List<String> idproyectos = new ArrayList<String>();
        Evaluador e = daoEvaluador.findEvaluador(Aux);
        CalificaJpaController daocalifica = new CalificaJpaController(factory);
        List<Califica> califica = daocalifica.findCalificaEntities();
        List<Proyecto> proyectos = daoProyecto.findProyectoEntities();
        List<Proyecto> evaluador = new ArrayList<Proyecto>();

        for (int i = 0; i < califica.size(); i++) {
            if (califica.get(i).getEvaluador().getCedula().equals(e.getCedula())) {

                idproyectos.add(califica.get(i).getProyecto().getIdProyecto());
            }
        }

        for (int x = 0; x < idproyectos.size(); x++) {

            for (int i = 0; i < proyectos.size(); i++) {

                if (idproyectos.get(i).equals(proyectos.get(i).getIdProyecto())) {

                    evaluador.add(proyectos.get(i));

                }
            }
            setListaProyecto(evaluador);
        }
    }

    public void editarProyecto() {

        Proyecto reemplazo = getProyecto();
        factory = Connection.getEmf();
        ProyectoJpaController daoProyecto = new ProyectoJpaController(factory);
        Proyecto pro = daoProyecto.findProyecto(reemplazo.getIdProyecto());
        pro.setNombre(reemplazo.getNombre());
        pro.setDescripcion(reemplazo.getDescripcion());
        pro.setDuracion(reemplazo.getDuracion());
        pro.setFechaInicio(reemplazo.getFechaInicio());
        pro.setFechaFin(reemplazo.getFechaFin());
        pro.setPresupuesto(reemplazo.getPresupuesto());
        try {
            daoProyecto.edit(pro);
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void borrarProyecto() {

        Proyecto reemplazo = getProyecto();
        factory = Connection.getEmf();
        ProyectoJpaController daoProyecto = new ProyectoJpaController(factory);
        try {
            daoProyecto.destroy(reemplazo.getIdProyecto());
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void crearProyecto() {

        ControladorProfesor controla = (ControladorProfesor) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("ControladorProfesor");
        Profesor profe = controla.getProfesor();
        Proyecto p = new Proyecto();
        p.setIdProyecto(getIDProyecto());
        p.setNombre(getNombre());
        p.setCedulaProfesor(profe);
        p.setFacultad(profe.getFacultad());
        p.setDescripcion(getDescripcion());
        p.setDuracion(getDuracion());
        p.setEstado("activo");
        p.setFechaFin(getFechaFin());
        p.setFechaInicio(getFechaInicio());
        p.setPresupuesto(getPresupuesto());
        factory = Connection.getEmf();
        ProyectoJpaController daoProyecto = new ProyectoJpaController(factory);
        try {
            daoProyecto.create(p);
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ControladorProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public List<Proyecto> getListaProyecto() {
        return listaProyecto;
    }

    public void setListaProyecto(List<Proyecto> listaProyecto) {
        this.listaProyecto = listaProyecto;
    }

    public Proyecto getProyecto() {
        return proyecto;
    }

    public void setProyecto(Proyecto proyecto) {
        this.proyecto = proyecto;
    }

    public List<Proyecto> getListaProyectoFacultad() {
        return listaProyectoFacultad;
    }

    public void setListaProyectoFacultad(List<Proyecto> listaProyectoFacultad) {
        this.listaProyectoFacultad = listaProyectoFacultad;
    }

    public String getIDProyecto() {
        return IDProyecto;
    }

    public void setIDProyecto(String IDProyecto) {
        this.IDProyecto = IDProyecto;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String Nombre) {
        this.nombre = Nombre;
    }

    public String getCedulaProfesor() {
        return cedulaProfesor;
    }

    public void setCedulaProfesor(String cedulaProfesor) {
        this.cedulaProfesor = cedulaProfesor;
    }

    public String getFacultad() {
        return facultad;
    }

    public void setFacultad(String facultad) {
        this.facultad = facultad;
    }

    public int getDuracion() {
        return duracion;
    }

    public void setDuracion(int duracion) {
        this.duracion = duracion;
    }

    public int getPresupuesto() {
        return presupuesto;
    }

    public void setPresupuesto(int presupuesto) {
        this.presupuesto = presupuesto;
    }

    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public int getCalificacion() {
        return calificacion;
    }

    public void setCalificacion(int calificacion) {
        this.calificacion = calificacion;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
}
